package com.wyr.proxyfactory;

import org.springframework.aop.ThrowsAdvice;

import java.lang.reflect.Method;

public class MyThrowsAdvice implements ThrowsAdvice {
    // 无参数构造函数
    public MyThrowsAdvice() {
        // 构造函数中可以添加逻辑，如果有需要的话
        System.out.println("MyThrowsAdvice instance created.");
    }

    // 在方法抛出异常后执行的逻辑
    public void afterThrowing(Exception ex) throws Throwable {
        System.out.println("After throwing advice: " + ex.getMessage());
        // 可以根据需要执行其他逻辑
    }

    // 在方法抛出指定类型异常后执行的逻辑
    public void afterThrowing(RuntimeException ex) throws Throwable {
        System.out.println("After throwing advice for RuntimeException: " + ex.getMessage());
        // 可以根据需要执行其他逻辑
    }

    // 在方法抛出特定类型异常后执行的逻辑
    public void afterThrowing(IllegalArgumentException ex) throws Throwable {
        System.out.println("After throwing advice for IllegalArgumentException: " + ex.getMessage());
        // 可以根据需要执行其他逻辑
    }


    public void afterThrowing(Method method, Object[] args, Object target, RuntimeException ex) {
        // 在方法抛出异常后执行的逻辑，接收方法、参数、目标对象和异常对象
        System.out.println("Exception caught: " + ex.getMessage());
        System.out.println("Method: " + method.getName());
        System.out.println("Target: " + target);
    }

    /**
     * 异常匹配逻辑，只会匹配其中一个afterThrowing方法
     * 优先匹配精确度高的，如果精确度一样，则优先匹配参数少的
     */
}
